// pages/apply/handle/handleRentApply.js
const app = getApp()
import api from '../../../config/api'
import path from '../../../config/path'
const bubbleMixin = require('../../../utils/page-mixin');

Page({
  ...bubbleMixin,
  data: {
    applyId: null,
    applyDetail: {},
    userRole: 0,
    userId: null,
    loading: false
  },

  onLoad(options) {
    if (options.id) {
      this.setData({ applyId: options.id })
      this.loadDetail()
    }
    
    const userInfo = wx.getStorageSync('userInfo')
    if (userInfo) {
      this.setData({ 
        userRole: userInfo.role || 0,
        userId: userInfo.id || null
      })
    }
  },

  loadDetail() {
    this.setData({ loading: true })
    
    api.get('apply', path.path.getApplyDetail + this.data.applyId).then(res => {
      if (res.code === 200) {
        this.setData({ 
          applyDetail: res.data || {},
          loading: false
        })
      } else {
        this.setData({ loading: false })
        wx.showToast({
          title: '加载详情失败',
          icon: 'none'
        })
      }
    }).catch(err => {
      console.error('加载详情失败:', err)
      this.setData({ loading: false })
      wx.showToast({
        title: '加载详情失败',
        icon: 'none'
      })
    })
  },

  // 处理申请（房东操作）
  handleApply(e) {
    const action = e.currentTarget.dataset.action
    const status = action === 'agree' ? 1 : 2
    
    wx.showModal({
      title: action === 'agree' ? '同意申请' : '拒绝申请',
      content: action === 'agree' ? '确定要同意这个租房申请吗？' : '确定要拒绝这个租房申请吗？',
      confirmColor: action === 'agree' ? '#4caf50' : '#f44336',
      success: (res) => {
        if (res.confirm) {
          this.processApply(status)
        }
      }
    })
  },

  // 取消申请（申请人操作）
  cancelApply() {
    wx.showModal({
      title: '取消申请',
      content: '确定要取消这个租房申请吗？',
      confirmColor: '#f44336',
      success: (res) => {
        if (res.confirm) {
          this.processCancel()
        }
      }
    })
  },

  // 处理申请请求（房东操作）
  processApply(status) {
    wx.showLoading({
      title: '处理中...',
    })
    
    const statusNum = Number(status)
    
    // 使用query参数格式
    api.put('apply', `${path.path.handleApply}?id=${this.data.applyId}&status=${statusNum}`, {})
    .then(res => {
      wx.hideLoading()
      
      if (res.code === 200) {
        wx.showToast({
          title: statusNum === 1 ? '已同意申请' : '已拒绝申请',
          icon: 'success',
          duration: 2000
        })
        
        // 更新本地数据
        const applyDetail = this.data.applyDetail
        applyDetail.status = statusNum
        applyDetail.updateTime = new Date().toISOString()
        
        this.setData({ applyDetail })
        
        // 发送事件通知列表页面更新
        if (app.globalData.eventBus) {
          app.globalData.eventBus.emit('applyStatusChanged', {
            id: this.data.applyId,
            status: statusNum
          })
        }
      } else {
        wx.showToast({
          title: res.message || '处理失败',
          icon: 'none'
        })
      }
    }).catch(err => {
      wx.hideLoading()
      console.error('处理失败:', err)
      wx.showToast({
        title: '处理失败，请重试',
        icon: 'none'
      })
    })
  },

  // 取消申请请求（申请人操作）
  processCancel() {
    wx.showLoading({
      title: '取消中...',
    })
    
    // 使用query参数格式
    api.put('apply', `${path.path.cancelApply}?id=${this.data.applyId}`, {})
    .then(res => {
      wx.hideLoading()
      
      if (res.code === 200) {
        wx.showToast({
          title: '已取消申请',
          icon: 'success',
          duration: 2000
        })
        
        // 更新本地数据
        const applyDetail = this.data.applyDetail
        applyDetail.status = 3 // 已取消状态
        applyDetail.updateTime = new Date().toISOString()
        
        this.setData({ applyDetail })
        
        // 发送事件通知列表页面更新
        if (app.globalData.eventBus) {
          app.globalData.eventBus.emit('applyStatusChanged', {
            id: this.data.applyId,
            status: 3
          })
        }
      } else {
        wx.showToast({
          title: res.message || '取消失败',
          icon: 'none'
        })
      }
    }).catch(err => {
      wx.hideLoading()
      console.error('取消失败:', err)
      wx.showToast({
        title: '取消失败，请重试',
        icon: 'none'
      })
    })
  },

  // 获取状态文本
  getStatusText(status) {
    const statusMap = {
      0: '待处理',
      1: '已同意', 
      2: '已拒绝',
      3: '已取消'
    }
    return statusMap[status] || '未知状态'
  },

  // 格式化时间
  formatTime(timeStr) {
    if (!timeStr) return '--';
    try {
      const date = new Date(timeStr);
      const now = new Date();
      
      // 如果是今天，显示时间
      if (date.toDateString() === now.toDateString()) {
        return date.getHours().toString().padStart(2, '0') + ':' + 
               date.getMinutes().toString().padStart(2, '0');
      }
      
      // 如果是今年，显示月日
      if (date.getFullYear() === now.getFullYear()) {
        return (date.getMonth() + 1) + '月' + date.getDate() + '日 ' + 
               date.getHours().toString().padStart(2, '0') + ':' + 
               date.getMinutes().toString().padStart(2, '0');
      }
      
      // 否则显示完整日期
      return date.getFullYear() + '年' + (date.getMonth() + 1) + '月' + date.getDate() + '日 ' + 
             date.getHours().toString().padStart(2, '0') + ':' + 
             date.getMinutes().toString().padStart(2, '0');
    } catch (error) {
      return timeStr;
    }
  },

  // 格式化日期（不带时间）
  formatDate(dateStr) {
    if (!dateStr) return '--';
    try {
      const date = new Date(dateStr);
      return date.getFullYear() + '年' + (date.getMonth() + 1) + '月' + date.getDate() + '日';
    } catch (error) {
      return dateStr;
    }
  },

  // 下拉刷新
  onPullDownRefresh() {
    this.loadDetail()
    setTimeout(() => {
      wx.stopPullDownRefresh()
    }, 1000)
  }
})